package model;

import componenten.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author misja
 */
public class Locatie {

    private String naam;
    private String plaats;
    private String straat;
    private String huisnummer;
    private String postcode;
    private int deelnemers;
    private ArrayList bericht;
    private boolean gevalideerd;

    public Locatie() {
        this.naam = "";
        this.plaats = "";
        this.straat = "";
        this.huisnummer = "";
        this.postcode = "";
        this.deelnemers = 0;
        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    public Locatie(String argHuisnummer, String argPostcode) {

        String sql = "SELECT * FROM locatie WHERE locatie_huisnummer = '" + argHuisnummer + "' AND locatie_postcode = '" + argPostcode + "'";
        System.out.print(sql);
        try {
            ResultSet result = Database.executeSelectQuery(sql);
            result.next();
            this.naam = result.getString("locatie_naam");
            this.plaats = result.getString("locatie_plaats");
            this.straat = result.getString("locatie_straat");
            this.huisnummer = result.getString("locatie_huisnummer");
            this.postcode = result.getString("locatie_postcode");
            this.deelnemers = result.getInt("locatie_max_deelnemers");

        } catch (SQLException e) {
            System.out.print(e);
        }

        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }

    private void valideren() {
        if ("".equals(this.getNaam())) {
            this.getBericht().add("Naam is verplicht");
            this.gevalideerd = false;
        }

        if ("".equals(this.getPlaats())) {
            this.getBericht().add("Plaats is verplicht");
            this.gevalideerd = false;
        }
        if ("".equals(this.getStraat())) {
            this.getBericht().add("Straat is verplicht");
            this.gevalideerd = false;
        }
        if ("".equals(this.getHuisnummer())) {
            this.getBericht().add("Huisnummer is verplicht");
            this.gevalideerd = false;
        }
        if ("".equals(this.getPostcode())) {
            this.getBericht().add("Postcode is verplicht");
            this.gevalideerd = false;
        }
        if (this.getDeelnemers() == 0) {
            this.getBericht().add("Deelnemers zijn verplicht");
            this.gevalideerd = false;
        }
        if (!this.postcode.matches("[0-9]{4}[A-Z]{2}")) {
            this.getBericht().add("Postcode klopt niet");
            this.gevalideerd = false;
        }
        if (!huisnummer.matches ("^([0-9]{1,}+([A-Za-z]+)?)$")) {
            this.getBericht().add("Huisnummer klopt niet");
            this.gevalideerd = false;
        }

    }

    public boolean toevoegen() {
        this.valideren();
        if (this.gevalideerd) {
            String sqlQuery = "INSERT INTO fullhouse.locatie ("
                    + "locatie_naam, "
                    + "locatie_plaats, "
                    + "locatie_straat, "
                    + "locatie_huisnummer, "
                    + "locatie_postcode, "
                    + "locatie_max_deelnemers"
                    + ") VALUES ("
                    + "'" + this.naam + "'" + " , "
                    + "'" + this.plaats + "'" + " , "
                    + "'" + this.straat + "'" + " , "
                    + "'" + this.huisnummer + "'" + " , "
                    + "'" + this.postcode + "'" + " , "
                    + this.deelnemers
                    + ")";

            if (Database.executeInsertQuery(sqlQuery) != 1) {
                this.gevalideerd = false;
                this.getBericht().add("Er is een fout onstaan tijdens het opslaan probeer opnieuw");
            }
        }
        return this.gevalideerd;
    }

    public boolean bijwerken(String argHuisnummer, String argPostcode) {
        this.valideren();
        if (this.gevalideerd) {
            String sqlQuery = "UPDATE fullhouse.locatie SET "
                    + "locatie_naam = '" + this.naam + "', "
                    + "locatie_plaats = '" + this.plaats + "', "
                    + "locatie_straat = '" + this.straat + "', "
                    + "locatie_huisnummer = '" + this.huisnummer + "', "
                    + "locatie_postcode = '" + this.postcode + "', "
                    + "locatie_max_deelnemers = '" + this.deelnemers + "' "
                    + "WHERE locatie_postcode = '" + argPostcode + "' "
                    + "AND locatie_huisnummer = '" + argHuisnummer + "'";

            if (Database.executeUpdateQuery(sqlQuery) != 1) {
                this.gevalideerd = false;
                this.getBericht().add("Er is een fout onstaan tijdens het bijwerken probeer opnieuw");
            }
        }
        return this.gevalideerd;
    }

    public boolean verwijderen() {
        this.valideren();
        if (this.gevalideerd) {

            String sqlQuery = "DELETE FROM fullhouse.locatie "
                    + "WHERE "
                    + "locatie_postcode = '" + this.postcode + "' "
                    + "AND "
                    + "locatie_huisnummer = '" + this.huisnummer + "'";

            if (Database.executeDeleteQuery(sqlQuery) != 1) {
                this.gevalideerd = false;
                this.getBericht().add("Er is een fout onstaan tijdens het verwijderen probeer opnieuw");
            }
        }
        return this.gevalideerd;
    }

    /**
     * @return the naam
     */
    public String getNaam() {
        return naam;
    }

    /**
     * @param naam the naam to set
     */
    public void setNaam(String naam) {
        if (naam.length() > 60) {
            this.naam = naam.substring(0, 60);
        } else {
            this.naam = naam;
        }
    }

    /**
     * @return the plaats
     */
    public String getPlaats() {
        return plaats;
    }

    /**
     * @param plaats the plaats to set
     */
    public void setPlaats(String plaats) {
        if (plaats.length() > 30) {
            this.plaats = plaats.substring(0, 30);
        } else {
            this.plaats = plaats;
        }
    }

    /**
     * @return the straat
     */
    public String getStraat() {
        return straat;
    }

    /**
     * @param straat the straat to set
     */
    public void setStraat(String straat) {
        if (straat.length() > 60) {
            this.straat = straat.substring(0, 60);
        } else {
            this.straat = straat;
        }
    }

    /**
     * @return the huisnummer
     */
    public String getHuisnummer() {
        return huisnummer;
    }

    /**
     * @param huisnummer the huisnummer to set
     */
    public void setHuisnummer(String huisnummer) {
        if (huisnummer.length() > 10) {
            this.huisnummer = huisnummer.substring(0, 10);
        } else {
            this.huisnummer = huisnummer;
        }
    }

    /**
     * @return the postcode
     */
    public String getPostcode() {
        return postcode;
    }

    /**
     * @param postcode the postcode to set
     */
    public void setPostcode(String postcode) {
        if (postcode.length() > 10) {
            this.postcode = postcode.substring(0, 10);
        } else {
            this.postcode = postcode;
        }
    }

    /**
     * @return the deelnemers
     */
    public int getDeelnemers() {
        return deelnemers;
    }

    /**
     * @param deelnemers the deelnemers to set
     */
    public void setDeelnemers(String deelnemers) {
        try {
            this.deelnemers = Integer.parseInt(deelnemers);
        } catch (NumberFormatException e) {
            this.gevalideerd = false;
            this.getBericht().add("Voer een geldig nummer in allen gehele getallen boven de 0" + e.getMessage());
        }
    }

    /**
     * @return the bericht
     */
    public ArrayList getBericht() {
        return bericht;
    }

    /**
     * @param bericht the bericht to set
     */
    public void setBericht(ArrayList bericht) {
        this.bericht = bericht;
    }

    public void resetBericht() {
        this.bericht = new ArrayList();
        this.gevalideerd = true;
    }
    /**
     * @return the gevalideerd
     */
    public boolean isGevalideerd() {
        return gevalideerd;
    }

    public String[] getInformatie() {
        return new String[]{this.naam, this.plaats,this.straat,this.huisnummer,this.postcode};
    }
}
